# Copyright (C) 2008-2015 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# In order to work around the very problems that force us to now generally
# create a libgcc.so, glibc reexported a number of routines from libgcc.a.
# By now choosing the same version tags for these specific routines, we
# maintain enough binary compatibility to allow future versions of glibc
# to defer implementation of these routines to libgcc.so via DT_AUXILIARY.

%ifndef __x86_64__
%exclude {
  __divdi3
  __moddi3
  __udivdi3
  __umoddi3
  __register_frame
  __register_frame_table
  __deregister_frame
  __register_frame_info
  __deregister_frame_info
  __frame_state_for
  __register_frame_info_table
}

%inherit GCC_3.0 GLIBC_2.0
GLIBC_2.0 {
  # Sampling of DImode arithmetic used by (at least) i386 and m68k.
  __divdi3
  __moddi3
  __udivdi3
  __umoddi3

  # Exception handling support functions used by most everyone.
  __register_frame
  __register_frame_table
  __deregister_frame
  __register_frame_info
  __deregister_frame_info
  __frame_state_for
  __register_frame_info_table
}
%endif

# 128 bit long double support was introduced with GCC 4.3.0 to 64bit
# and with GCC 4.4.0 to 32bit.  These lines make the symbols to get
# a @@GCC_4.3.0 or @@GCC_4.4.0 attached.

%exclude {
  __addtf3
  __divtc3
  __divtf3
  __eqtf2
  __extenddftf2
  __extendsftf2
  __extendxftf2
  __fixtfdi
  __fixtfsi
  __fixtfti
  __fixunstfdi
  __fixunstfsi
  __fixunstfti
  __floatditf
  __floatsitf
  __floattitf
  __floatunditf
  __floatunsitf
  __floatuntitf
  __getf2
  __gttf2
  __letf2
  __lttf2
  __multc3
  __multf3
  __negtf2
  __netf2
  __powitf2
  __subtf3
  __trunctfdf2
  __trunctfsf2
  __trunctfxf2
  __unordtf2
}

%ifdef __x86_64__
# Those symbols had improper versions when they were added to gcc 4.3.0.
# We corrected the default version to GCC_4.3.0.  But we keep the old
# version for backward binary compatibility. 
GCC_3.0 {
  __gttf2
  __lttf2
  __netf2
}

GCC_4.0.0 {
  __divtc3
  __multc3
  __powitf2
}

GCC_4.3.0 {
  __addtf3
  __divtc3
  __divtf3
  __eqtf2
  __extenddftf2
  __extendsftf2
  __extendxftf2
  __fixtfdi
  __fixtfsi
  __fixtfti
  __fixunstfdi
  __fixunstfsi
  __fixunstfti
  __floatditf
  __floatsitf
  __floattitf
  __floatunditf
  __floatunsitf
  __floatuntitf
  __getf2
  __gttf2
  __letf2
  __lttf2
  __multc3
  __multf3
  __negtf2
  __netf2
  __powitf2
  __subtf3
  __trunctfdf2
  __trunctfsf2
  __trunctfxf2
  __unordtf2
}

GCC_4.8.0 {
  __cpu_model
  __cpu_indicator_init
}
%else
GCC_4.4.0 {
  __addtf3
  __copysigntf3
  __divtc3
  __divtf3
  __eqtf2
  __extenddftf2
  __extendsftf2
  __fabstf2
  __fixtfdi
  __fixtfsi
  __fixunstfdi
  __fixunstfsi
  __floatditf
  __floatsitf
  __floatunditf
  __floatunsitf
  __getf2
  __gttf2
  __letf2
  __lttf2
  __multc3
  __multf3
  __negtf2
  __netf2
  __powitf2
  __subtf3
  __trunctfdf2
  __trunctfsf2
  __trunctfxf2
  __unordtf2
}
GCC_4.5.0 {
  __extendxftf2
}

GCC_4.8.0 {
  __cpu_model
  __cpu_indicator_init
}
%endif
